1045D - Interstellar battle - CodeForces Solution


math probabilities trees *2200

Please click on ads to support us..

C++ Code:

//TrungNotChung
#include <bits/stdc++.h>
#define pii pair<int , int>
#define fi first
#define se second
#define BIT(x,i) (1&((x)>>(i)))
#define MASK(x)  (1LL<<(x))
#define CNT(x) __builtin_popcountll(x)
#define task "tnc"  

using namespace std;
const int N = (int)1e5+228;

int n, par[N];
double p[N];
vector<vector<int> > adj;
int q;
double sum[N];

void dfs(int u)
{
    for(int v : adj[u])
    {
        if(v == par[u])
            continue;
        par[v] = u;
        sum[par[v]] += 1.0 - p[v];
        dfs(v);
    }
}

void solve()
{
    cin >> n;
    for(int i=0; i<n; ++i)
        cin >> p[i];

    adj.assign(n+7, vector<int>());
    for(int i=1; i<n; ++i)
    {
        int u, v;
        cin >> u >> v;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }
    dfs(0);

    double res = 0;
    for(int i=0; i<n; ++i)
    {
        double tmp = 1.0 - p[i];
        if(i != 0)
            tmp *= p[par[i]];
        res += tmp;
    }
    cin >> q;
    while(q--)
    {
        int u;
        cin >> u;
        double tmp = 1.0 - p[u];
        if(u != 0)
            tmp *= p[par[u]], sum[par[u]] -= 1.0 - p[u];
        res -= tmp;
        res -= p[u] * sum[u];

        cin >> p[u];
        tmp = 1.0 - p[u];
        if(u != 0)
            tmp *= p[par[u]], sum[par[u]] += 1.0 - p[u];
        res += tmp;
        res += p[u] * sum[u];
        
        cout << fixed << setprecision(6) << res << '\n';

    }
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    #ifndef ONLINE_JUDGE
    freopen(task".inp","r",stdin);
    freopen(task".out","w",stdout);
    #endif // ONLINE_JUDGE
    solve();
    //cerr << "\nTime elapsed: " << 1000 * clock() / CLOCKS_PER_SEC << "ms\n";
    return 0;
}


Comments

Submit
0 Comments
More Questions

1367A - Short Substrings
87A - Trains
664A - Complicated GCD
1635D - Infinite Set
1462A - Favorite Sequence
1445B - Elimination
1656C - Make Equal With Mod
567A - Lineland Mail
1553A - Digits Sum
1359B - New Theatre Square
766A - Mahmoud and Longest Uncommon Subsequence
701B - Cells Not Under Attack
702A - Maximum Increase
1656D - K-good
1426A - Floor Number
876A - Trip For Meal
1326B - Maximums
1635C - Differential Sorting
961A - Tetris
1635B - Avoid Local Maximums
20A - BerOS file system
1637A - Sorting Parts
509A - Maximum in Table
1647C - Madoka and Childish Pranks
689B - Mike and Shortcuts
379B - New Year Present
1498A - GCD Sum
1277C - As Simple as One and Two
1301A - Three Strings
460A - Vasya and Socks